package com.duoec.magichour.mapper;

import com.duoec.magichour.core.BaseMapper;
import com.duoec.magichour.pojo.Article;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface ArticleMapper extends BaseMapper<Article, Long> {
    /**
     * 获取推荐文章
     *
     * @param skip  跳过n条记录
     * @param limit 最多获取m条记录
     * @return
     */
    List<Article> recommends(@Param("skip") int skip, @Param("limit") int limit);

    /**
     * 获取我收藏的文章
     *
     * @param userId 用户ID
     * @param skip   跳过n条记录
     * @param limit  最多获取m条记录
     * @return
     */
    List<Article> collection(@Param("userId") long userId, @Param("skip") int skip, @Param("limit") int limit);

    /**
     * 查询文章
     *
     * @param keyword 查询的关键词
     * @param skip    跳过n条记录
     * @param limit   最多获取m条记录
     * @return
     */
    List<Article> search(@Param("keyword") String keyword, @Param("skip") int skip, @Param("limit") int limit);

    /**
     * 获取某个文章ID的数量，用于判断是否存在
     *
     * @param articleId
     * @return
     */
    Integer countById(@Param("articleId") Long articleId);

    /**
     * 向文章添加回复数
     *
     * @param articleId 文章ID
     */
    void incArticleCommentCount(@Param("articleId") Long articleId);

    /**
     * 向文章收藏回复数
     *
     * @param articleId 文章ID
     */
    void incArticleCollection(@Param("articleId") long articleId);

    /**
     * 获取文章作者ID
     *
     * @param articleId 文章ID
     * @return
     */
    Long getArticleAuthor(@Param("articleId") long articleId);

    /**
     * 文章评论数-1
     *
     * @param articleId 文章ID
     */
    void decArticleCommentCount(@Param("articleId") long articleId);

    /**
     * 更新文章的分类
     *
     * @param articleCateId    旧文章分类ID
     * @param newArticleCateId 新文章分类ID
     */
    void changeArticleCate(@Param("articleCateId") int articleCateId, @Param("newArticleCateId") int newArticleCateId);

    /**
     * 获取某个用户的发布文章列表
     *
     * @param userId 用户ID
     * @param skip   跳过n条记录
     * @param limit  最多获取m条记录
     * @return
     */
    List<Article> userArticleList(@Param("userId") long userId, @Param("skip") int skip, @Param("limit") int limit);
}